home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1997-01-29 | 5.7 KB | 186 lines |
- 10 'SOLUTRI - Solution of Triangles - 24 DEC 93 rev. 28 SEP 96
- 20 IF EX$=""THEN EX$="EXIT"
- 30 CLS:KEY OFF:SCREEN 0
- 40 COLOR 7,0,5
- 50 ON ERROR GOTO 170
- 60 UL$=STRING$(80,205)
- 70 '
- 80 '.....start
- 90 CLS
- 100 A=0:B=0:C=0:D=0:E=0:F=0:G=0:H=0:I=0:J=0:K=0:T1=0:T2=0
- 110 COLOR 15,1
- 120 PRINT " SOLUTION OF TRIANGLES";TAB(61);"by George C. Murphy ";
- 130 COLOR 5,0:PRINT STRING$(80,223);
- 140 COLOR 7,0
- 150 GOTO 290
- 160 '
- 170 IF ERR=5 OR ERR=11 THEN 190
- 180 BEEP:LOCATE 20:PRINT "Error";ERR;"in line";ERL:END
- 190 COLOR 14,0
- 200 BEEP:LOCATE 20:PRINT " THE COMBINATION OF FACTORS ENTERED IS EITHER ";
- 210 PRINT "IMPOSSIBLE OR UNSOLVABLE.":GOTO 240
- 220 COLOR 14,0:BEEP:LOCATE 20:PRINT " ANGLE MUST BE LESS THAN 90<UNK! {00F8}> ":GOTO 240
- 230 COLOR 14,0:BEEP:LOCATE 20:PRINT " ANGLE MUST BE LESS THAN 180 <UNK! {00F8}>":GOTO 240
- 240 PRINT:COLOR 7,0
- 250 PRINT " Press any key to start over...."
- 260 IF INKEY$=""THEN 260
- 270 GOTO 10
- 280 '
- 290 '.....start
- 300 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 310 PI=3.14159
- 320 U$="####.###"
- 330 V$="####.##"
- 340 GOTO 410
- 350 '
- 360 '.....inverse sin and cos
- 370 ASN=ATN(X/SQR(-X*X+1)) 'arc sin
- 380 ACS=-ASN+PI/2 'arc cos
- 390 RETURN
- 400 '
- 410 '.....draw diagram
- 420 T=9
- 430 COLOR 7,0
- 440 PRINT TAB(T);" |\ /^\"
- 450 PRINT TAB(T);" | \ / (f) \"
- 460 PRINT TAB(T);" |(a) \ / \"
- 470 PRINT TAB(T);" | \ <i>/ \<j>"
- 480 PRINT TAB(T);" | \<e> / \"
- 490 PRINT TAB(T);" | \ / \"
- 500 PRINT TAB(T);" <d>| (b) \ / (h) (g) \"
- 510 PRINT TAB(T);" |_ _ _ _ _ _ _ \ /_ _ _ _ _ _ _ _ _ _ _ _ _ _ _\"
- 520 PRINT TAB(T);" <c> <k>"
- 530 COLOR 7,0
- 540 PRINT
- 550 PRINT TAB(T);" RIGHT-ANGLED TRIANGLE OBLIQUE-ANGLED TRIANGLE"
- 560 PRINT TAB(T);" SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND"
- 570 PRINT TAB(T);"(a),(b) are the angles (f),(g),(h) are the angles"
- 580 PRINT TAB(T);"<c>,<d>,<e> are the sides <i>,<j>,<k> are the sides"
- 590 PRINT UL$;
- 600 '
- 610 '.....input data
- 620 X=97:Y=107
- 630 '
- 640 LOCATE 18,20:COLOR 0,7
- 650 PRINT " Press 1 to RUN program or 0 to EXIT.....":COLOR 7,0
- 660 Z$=INKEY$:IF Z$=""THEN 640
- 670 IF Z$="0"THEN RUN EX$
- 680 IF Z$="1"THEN 710
- 690 GOTO 640
- 700 '
- 710 LOCATE 18,2:COLOR 0,7
- 720 PRINT " Press one of the above letters to select a known angle or side..."
- 730 COLOR 7,0
- 740 Z$=INKEY$:IF Z$=""THEN 740
- 750 IF ASC(Z$)<X OR ASC(Z$)>Y THEN 740
- 760 IF ASC(Z$)<=101 THEN Y=101
- 770 IF Y=101 THEN FOR Z=3 TO 16:LOCATE Z,39:PRINT STRING$(40,32):NEXT Z
- 780 IF ASC(Z$)>=102 THEN X=102
- 790 IF X=102 THEN FOR Z=3 TO 16:LOCATE Z,1:PRINT STRING$(33,32):NEXT Z
- 800 '
- 810 LOCATE 18:PRINT STRING$(80,32);:LOCATE 18 'clear dialog line
- 820 Q=ASC(Z$)
- 830 IF(Q>=97 AND Q<=98)OR(Q>=102 AND Q<=104)THEN I$="Degrees, angle ("+Z$+")"
- 840 IF(Q>=99 AND Q<=101)OR(Q>=105 AND Q<=107)THEN I$="Length of side <"+Z$+">"
- 850 PRINT " ENTER: ";I$;
- 860 '
- 870 '.....right-angled triangles
- 880 IF Z$="a"THEN INPUT A:T2=A*PI/180:T1=PI/2-T2:IF A>=90 THEN 220
- 890 IF Z$="b"THEN INPUT B:T1=B*PI/180:T2=PI/2-T1:IF B>=90 THEN 220
- 900 IF Z$="c"THEN INPUT C
- 910 IF Z$="d"THEN INPUT D
- 920 IF Z$="e"THEN INPUT E
- 930 '
- 940 '.....oblique-angled triangles
- 950 IF Z$="f"THEN INPUT F:F=F*PI/180:IF F>=PI THEN 230
- 960 IF Z$="g"THEN INPUT G:G=G*PI/180:IF G>=PI THEN 230
- 970 IF Z$="h"THEN INPUT H:H=H*PI/180:IF H>=PI THEN 230
- 980 IF Z$="i"THEN INPUT I
- 990 IF Z$="j"THEN INPUT J
- 1000 IF Z$="k"THEN INPUT K
- 1010 '
- 1020 GOSUB 1040:GOTO 710
- 1030 '
- 1040 '.....solve right-angled triangle
- 1050 IF D*C THEN E=SQR(D^2+C^2):T1=ATN(D/C):T2=PI/2-T1:GOTO 1440
- 1060 IF D*E THEN C=SQR(E^2-D^2):X=D/E:GOSUB 360:T1=ASN:T2=PI/2-T1:GOTO 1440
- 1070 IF C*E THEN D=SQR(E^2-C^2):X=C/E:GOSUB 360:T1=ACS:T2=PI/2-T1:GOTO 1440
- 1080 IF C*T1 THEN D=C/TAN(T2):E=C/COS(T1):GOTO 1440
- 1090 IF D*T1 THEN C=D/TAN(T1):E=D/SIN(T1):GOTO 1440
- 1100 IF E*T1 THEN D=E*SIN(T1):C=E*COS(T1):GOTO 1440
- 1110 '
- 1120 '.....solve oblique angled triangle
- 1130 IF I*J*K THEN 1380 '3 sides know
- 1140 '
- 1150 IF F=0 THEN IF G*H THEN F=PI-G-H '3rd angle if two angles known
- 1160 IF G=0 THEN IF F*H THEN G=PI-F-H
- 1170 IF H=0 THEN IF F*G THEN H=PI-F-G
- 1180 '
- 1190 IF I*F*G*H THEN J=I*SIN(H)/SIN(G):K=I*SIN(F)/SIN(G):GOTO 1440
- 1200 IF J*F*G*H THEN K=J*SIN(F)/SIN(H):I=J*SIN(G)/SIN(H):GOTO 1440
- 1210 IF K*F*G*H THEN I=K*SIN(G)/SIN(F):J=K*SIN(H)/SIN(F):GOTO 1440
- 1220 IF F*G THEN IF F+G>=PI THEN 190
- 1230 IF G*H THEN IF G+H>=PI THEN 190
- 1240 IF H*F THEN IF H+F>=PI THEN 190
- 1250 '
- 1260 IF F=0 THEN IF J*K*H THEN X=K/J*SIN(H):GOSUB 360:F=ASN:GOTO 1150
- 1270 IF H=0 THEN IF J*K*F THEN X=J/K*SIN(F):GOSUB 360:H=ASN:GOTO 1150
- 1280 IF F=0 THEN IF I*K*G THEN X=K/I*SIN(G):GOSUB 360:F=ASN:GOTO 1150
- 1290 IF G=0 THEN IF I*K*F THEN X=I/K*SIN(F):GOSUB 360:G=ASN:GOTO 1150
- 1300 IF G=0 THEN IF I*J*H THEN X=I/J*SIN(H):GOSUB 360:G=ASN:GOTO 1150
- 1310 IF H=0 THEN IF I*J*G THEN X=J/I*SIN(G):GOSUB 360:H=ASN:GOTO 1150
- 1320 '
- 1330 IF I=0 THEN IF J*K*G THEN I=SQR(J^2+K^2-(2*J*K*COS(G))):GOTO 1380
- 1340 IF J=0 THEN IF I*K*H THEN J=SQR(I^2+K^2-(2*I*K*COS(H))):GOTO 1380
- 1350 IF K=0 THEN IF I*J*F THEN K=SQR(I^2+J^2-(2*I*J*COS(F))):GOTO 1380
- 1360 GOTO 1440
- 1370 '
- 1380 '.....3 sides known
- 1390 S=(I+J+K)/2
- 1400 IF F=0 THEN F=2*ATN(SQR((S-J)*(S-I)/(S*(S-K))))
- 1410 IF G=0 THEN G=2*ATN(SQR((S-J)*(S-K)/(S*(S-I))))
- 1420 IF H=0 THEN H=2*ATN(SQR((S-K)*(S-I)/(S*(S-J))))
- 1430 '
- 1440 COLOR 0,7
- 1450 '.....screen print
- 1460 IF T2 THEN COLOR 7,0:LOCATE 5,T+6:PRINT " DEFSNGSOUNDSOUNDSOUND";
- 1470 IF T2 THEN COLOR 0,7:PRINT USING V$;T2*180/PI;:PRINT "<UNK! {00F8}>"
- 1480 IF T1 THEN COLOR 7,0:LOCATE 9,T+14:PRINT " DEFSNGSOUNDSOUNDSOUND";
- 1490 IF T1 THEN COLOR 0,7:PRINT USING V$;T1*180/PI;:PRINT "<UNK! {00F8}>"
- 1500 IF C THEN LOCATE 11,T+9:PRINT USING U$;C;:PRINT " "
- 1510 IF D THEN LOCATE 9,T+1:PRINT USING U$;D;:PRINT " "
- 1520 IF E THEN LOCATE 7,T+10:PRINT USING U$;E;:PRINT " "
- 1530 IF F THEN COLOR 7,0:LOCATE 4,T+44:PRINT " DEFSNGSOUNDSOUNDSOUNDSOUND";
- 1540 IF F THEN COLOR 0,7:PRINT USING V$;F*180/PI;:PRINT "<UNK! {00F8}>"
- 1550 IF G THEN LOCATE 9,T+49:PRINT USING V$;G*180/PI;:PRINT "<UNK! {00F8}>"
- 1560 IF H THEN LOCATE 9,T+34:PRINT USING V$;H*180/PI;:PRINT "<UNK! {00F8}>"
- 1570 IF I THEN LOCATE 6,T+34:PRINT USING U$;I;:PRINT " "
- 1580 IF J THEN LOCATE 6,T+48:PRINT USING U$;J;:PRINT " "
- 1590 IF K THEN LOCATE 11,T+41:PRINT USING U$;K;:PRINT " "
- 1600 '
- 1610 COLOR 7,0
- 1620 IF T1*T2*C*D*E THEN 1660
- 1630 IF F*G*H*I*J*K THEN 1660
- 1640 RETURN
- 1650 '
- 1660 VIEW PRINT 15 TO 24:CLS:VIEW PRINT:LOCATE 15
- 1670 PRINT UL$;
- 1680 PRINT TAB(16);"NOTE: All calculated values have been rounded-off."
- 1690 PRINT UL$;
- 1700 LN=18:GOSUB 1730
- 1710 GOTO 80 'start
- 1720 '
- 1730 'HARDCOPY
- 1740 GOSUB 1850:LOCATE 25,2:COLOR 14,6
- 1750 PRINT " Press 1 to print screen, 2 to print screen & ";
- 1760 PRINT "advance paper, or 3 to continue.";:COLOR 7,0
- 1770 Z$=INKEY$:IF Z$="3"THEN GOSUB 1850:RETURN
- 1780 IF Z$="1"OR Z$="2"THEN GOSUB 1850:GOTO 1800
- 1790 GOTO 1770
- 1800 FOR QX=1 TO 24:FOR QY=1 TO 80
- 1810 LPRINT CHR$(SCREEN(QX,QY));
- 1820 NEXT QY:NEXT QX
- 1830 IF Z$="2"THEN LPRINT CHR$(12)
- 1840 GOTO 1740
- 1850 LOCATE 25,1:PRINT STRING$(80,32);:RETURN
-